﻿#ifndef MCONNECTIONGROUP_H
#define MCONNECTIONGROUP_H

#include <QObject>

class MConnectionGroupPrivate;
class MConnectionGroup : public QObject
{
    Q_OBJECT
public:
    explicit MConnectionGroup(qintptr ptr=0, QObject *parent = nullptr);
    ~MConnectionGroup();
public slots:
    void startInit();
    /*!@有新连接时
    */
    void addNewConnect(qintptr sktDescriptor);
    
    /*!@ 客户端有新的信息来
    */
    void clientReadyRead();
    
    /*!@ 当客户端断开连接时
     * des: 
    */
    void socketDisconnected();
    
    /*!@ 发送成员到每个客户端
     * des: 每当有新的连接加入并注册成功时，就会给所有客户端分发一次所有的客户端对象信息
    */
    void sendMembers();
    
    /*!@ 收到角色同步确认，做出相应处理
     * des: 当客户端收到成员对象信息并作出处理后，发出确认信息到服务端，服务端检查与是否完成同步，若不同步，就继续发送没有同步的成员对象信息
    */
    void roleSyncConfrimProcess(int id, const QStringList &ids);
    
    /*!@ 发送刷新数据到每个客户端
     * des: 间隔发送所有成员的状态到所有客户端
    */
    void sendRefreshDatas();
private:
    QJsonObject getRootJsObj(const QByteArray &data);
signals:
    /*!@ 当连接数量已经满员时，发送此信号
     * des: 服务管理类收到信号后，就不再分发新对连接过来
    */
    void connectionFull(qintptr sktDescriptor);
    
    /*!@ 当客户端全部都断开连接时，发送此信号
     * des: 服务管理类收到信号后，释放空间资源 及 解除绑定关系
    */
    void releaseSpace();
    
    /*!@在线人数变动
    */
    void onlineChange(bool isAdd);
private:
    MConnectionGroupPrivate *d;
};

#endif // MCONNECTIONGROUP_H
